package com.gengzp.system.service;

import com.gengzp.common.model.pagination.resp.PaginationResult;
import com.gengzp.common.model.role.req.AddSysRoleReq;
import com.gengzp.common.model.role.req.EditSysRoleReq;
import com.gengzp.common.model.role.req.PageSysRoleReq;
import com.gengzp.common.model.role.resp.PageSysRoleResp;
import com.gengzp.common.model.role.resp.SearchSysRolePermissionsResp;
import com.gengzp.common.model.role.resp.SearchSysRoleResp;

import java.util.Collection;
import java.util.List;

/**
 * @ClassName ISysRoleService
 * @Description 系统角色模块服务层接口
 * @Author gengzp
 * @Date 2025/5/16 0:32
 */
public interface ISysRoleService {

    /**
     * 添加系统角色
     *
     * @param req 添加系统角色请求对象
     */
    void addSysRole(AddSysRoleReq req);

    /**
     * 编辑系统角色
     *
     * @param req 编辑角色请求实体
     */
    void editSysRole(EditSysRoleReq req);


    /**
     * 根据id删除角色
     *
     * @param roleId 角色id
     */
    void removeSysRoleById(Long roleId);

    /**
     * 分页查询系统角色
     *
     * @param req 分页查询系统角色请求实体
     * @return 分页查询返回结果
     */
    PaginationResult<PageSysRoleResp> pageQuerySysRole(PageSysRoleReq req);

    /**
     * 根据角色id查询角色详细信息
     *
     * @param roleId 角色id
     * @return 角色详细信息
     */
    SearchSysRoleResp searchSysRoleById(Long roleId);

    /**
     * 根据角色id集合查询所有权限集合
     *
     * @param roleIds 角色id集合
     * @return 权限集合
     */
    List<String> searchPermissionsByRoleIds(Collection<Long> roleIds);

    /**
     * 根据id查询角色拥有的权限列表
     *
     * @param roleId 角色id
     * @return 权限列表
     */
    SearchSysRolePermissionsResp searchSysRolePermissionsById(Long roleId);

}
